package com.es.segment;

/**
 * @author 二十
 * @since 2022/1/19 11:15 下午
 */
public abstract class AbstractSegmentTree<E> {
    /**
     * 获取指定索引位置的元素
     * @param index
     * @return
     */
    public abstract E get(int index);

    /**
     * 获取线段树存储的元素个数
     * @return
     */
    public abstract int getSize();

    /**
     * 获取给定节点的左孩子节点的位置
     * @param index
     * @return
     */
    public abstract int leftChild(int index);
    /**
     * 获取给定节点的右孩子节点的位置
     * @param index
     * @return
     */
    public abstract int rightChild(int index);

    /**
     * 查询给定区间的值
     * @param queryL
     * @param queryR
     * @return
     */
    public abstract E query(int queryL, int queryR);

    /**
     * 修改指定位置的元素
     * @param index
     * @param e
     */
    public abstract void set(int index, E e);
}
